﻿using System;
using System.Collections.Generic;
using System.Text;
using log4net;

namespace Pink.Scheduler.Shared
{
	/// <summary>
	/// Инициализатор домена
	/// <remarks>Внутренний класс для запуска функции 
	/// инициализирования в контексте нового домена</remarks>
	/// </summary>
	public static class DomainInitializer
	{
		/// <summary>
		/// Настроить текущий домен, создав конфигуратор по ключу 
		/// настроек AppSettings["DomainInitializerClass"]
		/// </summary>
		public static void Initialize(string[] parameters)
		{
			string configuratorClass = System.Configuration.ConfigurationSettings
				.AppSettings["DomainInitializerClass"];
			// нам нужно или сконфигурировать домен нормально
			// или просто вызвать конфигурилку log4net, чтобы заработалд
			// логгинг
			if (!string.IsNullOrEmpty(configuratorClass))
			{
				Type configType = Type.GetType(configuratorClass);
				if (configType == null)
					throw new ArgumentException(string.Format("Не найден класс конфигуратора доменов, определённый в конфиге как DomainInitializerClass: {0}",
						configuratorClass));
				IDomainInitializer initializer =
					(IDomainInitializer)Activator.CreateInstance(configType);
				initializer.InitializeDomain();
			}
			else
			{
				// загружаем настройки из ресурсов
				System.IO.Stream configStream = typeof(DomainInitializer).Assembly
					.GetManifestResourceStream(string.Format("{0}.log4net.config",
					typeof(DomainInitializer).Assembly.GetName().Name));
				log4net.Config.XmlConfigurator.Configure(configStream);
			}
		}
	}
}
